#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

//long long Fib(int n)
//{
//	int a = 0;
//	int b = 1;
//	int c = 0;
//	for (int i = 2; i <= n; i++)
//	{
//		c = a + b;
//		a = b;
//		b = c;
//	}
//	return c;
//}
//
//int main()
//{
//	printf("%lld\n", Fib(40));
//	return 0;
//}


//void reversal(int* nums1, int* nums2)
//{
//    while (nums1 < nums2)
//    {
//        int tmp = *nums1;
//        *nums1 = *nums2;
//        *nums2 = tmp;
//        nums1++;
//        nums2--;
//    }
//}
//
//void rotate(int* nums, int numsSize, int k)
//{
//    k %= numsSize;
//    reversal(nums, nums + numsSize - 1 - k);
//    reversal(nums + numsSize - k, nums + numsSize - 1);
//    reversal(nums, nums + numsSize - 1);
//    return nums;
//}
//
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//    rotate(arr, sz, 3);
//    for (int i = 0; i < sz; i++)
//    {
//        printf("%d ", arr[i]);
//    }
//	return 0;
//}

//int Find(int* nums, int n)
//{
//	int ret = 0;
//	for (int i = 0; i <= n; i++)
//	{
//		ret ^= i;
//	}
//	for (int j = 0; j < n; j++)
//	{
//		ret ^= nums[j];
//	}
//	return ret;
//}
//
//int main()
//{
//	int arr[] = { 0,1,2,3,4,6,7,8,9 };
//	int n = 9;
//	int ret = Find(arr, n);
//	printf("%d\n", ret);
//	return 0;
//}

//int Findsingle(int* nums, int sz)
//{
//	int ret = 0;
//	for (int i = 0; i < sz; i++)
//	{
//		ret ^= nums[i];
//	}
//	return ret;
//}
//
//
//int main()
//{
//	int arr[] = { 1,2,3,4,5,1,2,3,4 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int ret = Findsingle(arr, sz);
//	printf("%d\n", ret);
//	return 0;
//}
#include<stdlib.h>

int* addToArrayForm(int* num, int numSize, int k, int* returnSize) {
    int end = numSize - 1;
    num[end] += k;
    *returnSize = numSize;
    while (num[end] / 10 > 0)
    {
        int x = num[end] / 10;
        num[end] -= x * 10;
        if (end > 0)
        {
            num[end - 1] += x;
        }
        else
        {
            ++*returnSize;
            int* tmp = (int*)realloc(num,(++numSize) * sizeof(int));
            if (tmp == NULL)
                exit(-1);
            num = tmp;
            
            for (int i = numSize-1; i > 0; i--)
            {
                num[i] = num[i - 1];
            }
            num[0] = x;
            end++;
        }
        end--;
    }
    return num;

}

int main()
{
    int* p = malloc(sizeof(int) * 20);
    if (p == NULL)
        exit(-1);
    int arr[] = { 0 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    for (int i = 0; i < sz; i++)
    {
        p[i] = arr[i];
    }
    int k = 233;
    int* x = &sz;
    int* ret = addToArrayForm(p, sz, k, x);
    for (int i = 0; i < *x; i++)
    {
        printf("%d ", p[i]);
    }
    return 0;
}